﻿using System;   
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TreinamentoCRUD3
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        
        public int codigo = 0;

        //Método salvar
        public void salvar() 
        {
            //Tentativa
            try
            {
                ///Instancia um objeto da Classe dados onde se encontra
                ///todos os meus comandos de SQL. (Insert, Select, Delete...)
                Dados objDados = new Dados();

                ///Para retirar a máscara do CPF, foi adicionado o valor 
                ///que foi digitado a variavel 'velhoCPF'. Os dados que
                ///esta variavel contém vem cheio de pontos e um hifem
                ///devido a mascara.
                String velhoCPF = txtCPF.Text;

                ///Aqui é retirado a mascara do CPF com o método REPLACE
                ///Adiciona-se o novo valor a variavel 'novoCPF'
                String novoCPF = novoCPF = velhoCPF.Replace(".", String.Empty).Replace("-", String.Empty);

                ///Aqui chama o método inserir da classe DADOS e passa os
                ///parametros. Existe uma conversao de String para Long
                ///no segundo parametro.
                objDados.Inserir(txtNome.Text, long.Parse(novoCPF));

                //Mostra uma mensagem ao usuario.
                MessageBox.Show("Salvo com sucesso!");

                //Limpa os valores dos campos de texto do formulario.
                txtCPF.Text = String.Empty;
                txtNome.Text = String.Empty;

            }//Final da tentativa.
            catch (Exception ex) //Caso dê erro. Captura-se o.
            {
                //Mostra mensagem de erro ao usuario.
                MessageBox.Show("Erro ao salvar! "+ex.Message);
            }//Fim da captura de erro.
        }//Fim método.

        public void excluir() 
        {
            int Codigo;

            if (listView1.SelectedItems.Count > 0)
            {
                try
                {
                    Codigo = int.Parse(listView1.SelectedItems[0].Text);
                    Dados objDados = new Dados();
                    objDados.Deletar(Codigo);
                    MessageBox.Show("Excluído com sucesso!");
                    listView1.SelectedItems[0].Remove();
                }
                catch (Exception ex)
                {
                    MessageBox.Show("Erro ao excluir " + ex.Message);
                }
            }
            else 
            {
                MessageBox.Show("Você deve selecionar uma linha para excluir!");
            }
            
        }

        public void alterar(int pCodigo) 
        {
            try
            {
                Dados objDados = new Dados();
                String velhoCPF = txtCPF.Text;
                String novoCPF = novoCPF = velhoCPF.Replace(".", String.Empty).Replace("-", String.Empty);

                objDados.Atualizar(pCodigo, txtNome.Text, long.Parse(novoCPF));
                MessageBox.Show("Dados atualizados com sucesso!");
                txtCPF.Text = String.Empty;
                txtNome.Text = String.Empty;
            }
            catch (Exception ex)
            {
                MessageBox.Show("Erro ao atualizar dados! "+ex.Message);
            }
        }

        public void carregarLista()
        {
            listView1.Items.Clear();
            Dados objDados = new Dados();
            List<Dados.Clientes> lstClientes = new List<Dados.Clientes>();
            lstClientes = objDados.Consultar();

            foreach (var itemLista in lstClientes)
            {
                ListViewItem objListView = new ListViewItem(itemLista.Codigo.ToString());
                objListView.SubItems.Add(itemLista.Nome.ToString());
                objListView.SubItems.Add(itemLista.CPF.ToString());
                listView1.Items.Add(objListView);
            }
        }

        public void consultarPorParametro(string pPesquisa) 
        {
            try
            {
                listView1.Items.Clear();
                Dados objDados = new Dados();
                List<Dados.Clientes> lstClientes = new List<Dados.Clientes>();
                lstClientes = objDados.consultarPorParametro(pPesquisa);

                foreach (var itemLista in lstClientes)
                {
                    ListViewItem objListViewItem = new ListViewItem(itemLista.Codigo.ToString());
                    objListViewItem.SubItems.Add(itemLista.Nome.ToString());
                    objListViewItem.SubItems.Add(itemLista.CPF.ToString());

                    listView1.Items.Add(objListViewItem);
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show("Erro na consulta... " + ex.Message);
            }
        }


        private void btEditar_Click(object sender, EventArgs e)
        { 
            long cpf = 0;
            string nome = String.Empty;

            if (listView1.SelectedItems.Count > 0)
            {
                codigo = int.Parse(listView1.SelectedItems[0].Text);
                nome = listView1.SelectedItems[0].SubItems[1].Text;
                cpf = long.Parse(listView1.SelectedItems[0].SubItems[2].Text);

                txtNome.Text = nome;
                txtCPF.Text = cpf.ToString();
                btCadastrar.Text = "Atualizar Dados";
            }
            else 
            {
                MessageBox.Show("Você deve selecionar uma linha na lista para editar!");
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            carregarLista();
        }

        private void btCadastrar_Click(object sender, EventArgs e)
        {
            if (codigo > 0)
            {
                alterar(codigo);
                codigo = 0;
                btCadastrar.Text = "Cadastrar";
                carregarLista();
            }
            else 
            {
                salvar();
                carregarLista();
            }
        }

        private void btExcluir_Click(object sender, EventArgs e)
        {
            excluir();
        }

        private void btRecarregar_Click(object sender, EventArgs e)
        {
            carregarLista();
        }

        private void txtPesquisa_KeyUp(object sender, KeyEventArgs e)
        {
            consultarPorParametro(txtPesquisa.Text);
        }

    }
}